package com.ww.java.generic.method.erase;

/**
 * @author wanggw
 * @Date 2023年07月22 23:00
 */
public class Manipulation {

    public static void main(String[] args) {
        HasF hasF = new HasF();
        Manipulator<HasF> manipulator = new Manipulator<HasF>(hasF);
        manipulator.manipulate();

        Manipulator2<HasF> hasF2 = new Manipulator2<HasF>(hasF);
        hasF2.manipulate();
    }
}

class Manipulator<T> {

    @SuppressWarnings("unused")
	private T obj;

    public Manipulator(T obj) {
        this.obj = obj;
    }

    /**
     * 由于有了擦除，Java编译器无法将mainpulate()必须能够在obj上调用f()这一需求映射到HasF拥有f()这一事实上。为了调用f()，我们必须协助
     * 泛型类，给定泛型类的边界，以此告知编译器只能接受遵循这个边界的类型。
     */
    public void manipulate() {
//        obj.f();
    }
}

